﻿using System;
using System.Collections;
using System.Collections.Generic;
using Drill.Extensibility;

namespace Drill.TestSupport
{
	public class InvalidDrillBit : IDrillBit
	{
		/// <summary>
		/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
		/// </summary>
		/// <filterpriority>2</filterpriority>
		public void Dispose()
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Gets an instance of the type specified by <paramref name="targetType"/>.
		/// </summary>
		/// <param name="targetType">The type of object to be retrieved.</param>
		/// <returns>An instance of the requested type.</returns>
		public object GetInstance(Type targetType)
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Gets a named instance of the type specified by <paramref name="targetType"/>.
		/// </summary>
		/// <param name="targetType">The type of object to be retrieved.</param>
		/// <param name="name">The name of the specific object instance.</param>
		/// <returns>An instance of the requested named type.</returns>
		public object GetInstance(Type targetType, string name)
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Get all instances of the type specified by <paramref name="targetType"/>.
		/// </summary>
		/// <param name="targetType">The type of object to be retrieved.</param>
		/// <returns>
		/// An <see cref="IEnumerable"/> instance representing all 
		/// available instances of the requested type.
		/// </returns>
		public IEnumerable GetAllInstances(Type targetType)
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Gets an instance of the type specified by <typeparamref name="TTargetType"/>.
		/// </summary>
		/// <typeparam name="TTargetType">The type of object to be retrieved.</typeparam>
		/// <returns>An instance of the requested type.</returns>
		public TTargetType GetInstance<TTargetType>()
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Gets a named instance of the type specified by <typeparamref name="TTargetType"/>.
		/// </summary>
		/// <typeparam name="TTargetType">The type of object to be retrieved.</typeparam>
		/// <param name="name">Name the object was registered with.</param>
		/// <returns>An instance of the requested named type.</returns>
		public TTargetType GetInstance<TTargetType>(string name)
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Get all instances of the type specified by <typeparamref name="TTargetType"/>.
		/// </summary>
		/// <typeparam name="TTargetType">The type of object to be retrieved.</typeparam>
		/// <returns>
		/// An <see cref="IEnumerable{TTargetType}"/> instance representing all 
		/// available instances of the requested type.
		/// </returns>
		public IEnumerable<TTargetType> GetAllInstances<TTargetType>()
		{
			throw new NotImplementedException();
		}

		/// <summary>
		/// Gets the object the DrillBit uses to resolve types.
		/// </summary>
		/// <value>The object the DrillBit uses to resolve types.</value>
		/// <remarks>
		/// The resolver object is usually the container object when the DrillBit wraps a DI container. 
		/// It may also some other type of object such as a service locator object or any other type of object imaginable.
		/// </remarks>
		public object ResolverObject { get; set; }
	}
}